package com.global.service;

import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.CannotGetJdbcConnectionException;

import com.global.model.DataSourceX;
import com.global.model.DataSourceXColumn;
import com.global.model.QueryParameterDefinition;
import com.global.model.Who;
import com.global.vo.BooleanResult;

public interface DataSourceXDefinitionService {
	
	/**
	 * 注册新的数据源字段
	 * @return true表示注册成功
	 */
	public DataSourceX registerOrUpdateDataSourceX(DataSourceX dataSourceX);
	
	/**
	 * 批量注册（更新）数据源字段
	 */
	public void saveDataSourceXColumns(List<DataSourceXColumn> columnList);
	
	/**
	 * 批量注册（更新）数据源字段
	 * @param saveList 需要新增（更新）的数据源字段
	 * @param deleList 需要删除的数据源字段
	 */
	public void saveDataSourceXColumns(List<DataSourceXColumn> saveList, List<DataSourceXColumn> deleList);
	
	/**
	 * 注册（更新）数据源字段，同时刷新数据源对象
	 * <br/>
	 * <span style="color:red">
	 * 如果新的数据源字段在旧的清单中不存在，则增加，否则更新；
	 * <br/>如果旧的数据源字段在新的数据源字段清单中不存在，则提示用户先去解除GridColoumn对该字段的绑定，然后再删除该字段
	 * </span>
	 * @return true表示注册成功，{@link BooleanResult}
	 */
	public BooleanResult registerOrUpdateDataSourceXColumns(DataSourceX dataSourceX, Who who) throws CannotGetJdbcConnectionException, SQLException;
	
	/**
	 * 注册（更新）数据源对应的参数，同时刷新数据源对象
	 * @param QueryParameterDefinitions
	 */
	public void registerOrUpdateQueryParameterDefinitions(List<QueryParameterDefinition> QueryParameterDefinitions);
	
	/**
	 * 从数据库中返回所有数据源参数
	 * @param dataSourceX
	 * @return
	 */
	public List<QueryParameterDefinition> getQueryParameterDefinitions(DataSourceX dataSourceX);
	
	/**
	 * 返回所有数据源
	 * @return 所有数据源，参考 {@link DataSourceX}
	 */
	public List<DataSourceX> getAllDataSourceXList();
	
	/**
	 * 从数据库中返回所有数据源字段
	 * @return 所有数据源，参考 {@link DataSourceXColumn}
	 */
	public List<DataSourceXColumn> getDataSourceXColumnList(DataSourceX dataSourceX);
	
	/**
	 * 删除数据源
	 * @param dataSourceX 数据源，参考 {@link DataSourceX}
	 * @return  {@link BooleanResult}
	 */
	public BooleanResult deleteDataSourceX(DataSourceX dataSourceX);
	
	/**
	 * 删除数据源字段
	 * @param dataSourceXColumn
	 * @return {@link BooleanResult}
	 */
	public BooleanResult deleteDataSourceXColumn(DataSourceXColumn dataSourceXColumn);
	
	/**
	 * 批量删除数据源字段
	 * @param dataSourceXColumnList
	 */
	public BooleanResult deleteBatchDataSourceXColumns(List<DataSourceXColumn> dataSourceXColumnList);
	
	/**
	 * 验证数据源字段配置是否合法
	 * @param dataSourceXColumn 参考{@linkplain DataSourceXColumn}
	 * @return
	 */
	public BooleanResult checkDataSourceXColumn(DataSourceXColumn dataSourceXColumn);
	
	/**
	 * 验证数据源字段配置是否合法
	 * @param dataSourceXColumnList 参考{@linkplain DataSourceXColumn}
	 * @return
	 */
	public BooleanResult checkDataSourceXColumns(List<DataSourceXColumn> dataSourceXColumnList);
	
	/**
	 * 验证数据源配置是否合法
	 * @param dataSourceX 参考{@linkplain DataSourceX}
	 * @return
	 */
	public BooleanResult checkDataSourceX(DataSourceX dataSourceX);
}
